home *** CD-ROM | disk | FTP | other *** search
/ The Utilities Experience / The Utilities Experience - Volume 1.iso / software / music / delitracker / files / developer.lzx / Developer / Examples / QuadraComposer.s < prev    next >
Text File  |  2001-05-31  |  30KB  |  1,536 lines

  1.  
  2.     incdir    "Includes:"
  3.     include    "misc/DeliPlayer.i"
  4.  
  5. ;
  6. ;
  7.     SECTION Player,Code
  8. ;
  9. ;
  10.  
  11.     PLAYERHEADER PlayerTagArray
  12.  
  13.     dc.b '$VER: QuadraComposer 2.1 player module V1.1 (26 Apr 95)',0
  14.     even
  15.  
  16. PlayerTagArray
  17.     dc.l    DTP_RequestDTVersion,16
  18.     dc.l    DTP_PlayerVersion,01<<16+10
  19.     dc.l    DTP_PlayerName,PName
  20.     dc.l    DTP_Creator,CName
  21.     dc.l    DTP_DeliBase,delibase
  22.     dc.l    DTP_Check2,Chk
  23.     dc.l    DTP_CheckLen,ChkLen
  24.     dc.l    DTP_Flags,PLYF_SONGEND
  25.     dc.l    DTP_Interrupt,Int
  26.     dc.l    DTP_InitPlayer,InitPlay
  27.     dc.l    DTP_EndPlayer,EndPlay
  28.     dc.l    DTP_InitSound,InitSnd
  29.     dc.l    DTP_EndSound,EndSnd
  30.     dc.l    DTP_Volume,SetVol
  31.     dc.l    DTP_Balance,SetVol
  32.     dc.l    TAG_DONE
  33.  
  34. *-----------------------------------------------------------------------*
  35. ;
  36. ; Player/Creatorname und lokale Daten
  37.  
  38. PName    dc.b 'QuadraComposer',0
  39. CName    dc.b '© 1993-94 Technological ArtWork',10
  40.     dc.b '(Bo Lincoln & Calle Englund)',10
  41.     dc.b 'adapted by Delirium',0
  42.     even
  43. delibase    dc.l 0
  44.  
  45. *-----------------------------------------------------------------------*
  46. ;
  47. ; Interrupt für Replay
  48.  
  49. Int
  50.     movem.l    d2-d7/a2-a6,-(sp)
  51.     bsr    QC_music            ; DudelDiDum
  52.     movem.l    (sp)+,d2-d7/a2-a6
  53.     rts
  54.  
  55. *-----------------------------------------------------------------------*
  56. ;
  57. ; Testet auf Modul
  58.  
  59. Chk                        ; QuadraComposer ?
  60.     move.l    dtg_ChkData(a5),a0
  61.     moveq    #-1,d0                ; Modul nicht erkannt (default)
  62.     cmp.l    #"FORM",(a0)
  63.     bne.s    ChkEnd
  64.     cmp.l    #"EMOD",8(a0)
  65.     bne.s    ChkEnd
  66.     cmp.l    #"EMIC",12(a0)
  67.     bne.s    ChkEnd
  68.     cmp.w    #1,20(a0)
  69.     bne.s    ChkEnd
  70.     moveq    #0,d0                ; Modul erkannt
  71. ChkEnd
  72.     rts
  73.  
  74. ChkLen = *-Chk
  75.  
  76. *-----------------------------------------------------------------------*
  77. ;
  78. ; Init Player
  79.  
  80. InitPlay
  81.     moveq    #0,d0
  82.     move.l    dtg_GetListData(a5),a0        ; Function
  83.     jsr    (a0)
  84.  
  85.     bsr    QC_reloc            ; relocate Module
  86.     tst.l    d0
  87.     bne.s    EndPlay2            ; error !
  88.  
  89.     move.l    dtg_AudioAlloc(a5),a0        ; Function
  90.     jsr    (a0)                ; returncode is already set !
  91.     rts
  92.  
  93. *-----------------------------------------------------------------------*
  94. ;
  95. ; End Player
  96.  
  97. EndPlay
  98.     move.l    dtg_AudioFree(a5),a0        ; Function
  99.     jsr    (a0)
  100. EndPlay2
  101.     moveq    #-1,d0
  102.     rts
  103.  
  104. *-----------------------------------------------------------------------*
  105. ;
  106. ; Init Module
  107.  
  108. InitSnd
  109.     bsr    QC_init
  110.     rts
  111.  
  112. *-----------------------------------------------------------------------*
  113. ;
  114. ; Clean up Module
  115.  
  116. EndSnd
  117.     bsr    QC_end
  118.     rts
  119.  
  120. *-----------------------------------------------------------------------*
  121. ;
  122. ; Copy Volume and Balance Data to internal Buffer
  123.  
  124. SetVol
  125.     move.w    dtg_SndLBal(a5),d0
  126.     mulu    dtg_SndVol(a5),d0
  127.     lsr.w    #6,d0
  128.     lea    QC_chan1(pc),a0
  129.     lea    $dff0a0,a1
  130.     moveq    #2-1,d1
  131. SetVolL
  132.     move.w    d0,t_mainvol(a0)
  133.     move.w    t_volume(a0),d2
  134.     mulu    d0,d2
  135.     lsr.w    #6,d2
  136.     move.w    d2,t_realvol(a0)
  137.     move.w    d2,8(a1)
  138.     lea    QC_chan4-QC_chan1(a0),a0
  139.     lea    $30(a1),a1
  140.     dbra    d1,SetVolL
  141.  
  142.     move.w    dtg_SndRBal(a5),d0
  143.     mulu    dtg_SndVol(a5),d0
  144.     lsr.w    #6,d0
  145.     lea    QC_chan2(pc),a0
  146.     lea    $dff0b0,a1
  147.     moveq    #2-1,d1
  148. SetVolR
  149.     move.w    d0,t_mainvol(a0)
  150.     move.w    t_volume(a0),d2
  151.     mulu    d0,d2
  152.     lsr.w    #6,d2
  153.     move.w    d2,t_realvol(a0)
  154.     move.w    d2,8(a1)
  155.     lea    QC_chan3-QC_chan2(a0),a0
  156.     lea    $10(a1),a1
  157.     dbra    d1,SetVolR
  158.     rts
  159.  
  160. *-----------------------------------------------------------------------*
  161. ;
  162. ; QuadraComposer2.1-Replay
  163.  
  164. ** This is a CIA replayroutine for EMOD's **
  165. ** It handles all commands and tempo      **
  166. ** You may include this in your own       **
  167. ** applications, if you wish...           **
  168. ** If you want to use this routinne in a  **
  169. ** player, you should write a "smart"     **
  170. ** load routine, which allocates a        **
  171. ** specific memory range for each sample  **
  172. ** and pattern etc.                       **
  173. **                          /Bo Lincoln   **
  174.  
  175. QC_reloc:move.l a0,d1        ;pointer to module
  176.     cmp.l #"FORM",(a0)
  177.     bne QC_initerr
  178.     cmp.l #"EMOD",8(a0)
  179.     bne QC_initerr
  180.     cmp.l #"EMIC",12(a0)
  181.     bne QC_initerr
  182.     cmp.w #1,20(a0)
  183.     bne QC_initerr
  184.  
  185.     move.w #256-1,d7
  186.     lea QC_samplepointers,a1
  187. QC_spclear:
  188.     move.l #QC_quietsamp,(a1)+
  189.     dbra d7,QC_spclear
  190.  
  191.     moveq #0,d7        ;Get the adresses to the sampleinfos
  192.     move.b 62(a0),QC_tempo+1
  193.     move.b 63(a0),d7    ;and init the real adresses in the infos
  194.     subq #1,d7
  195.     lea 64(a0),a0
  196.     lea QC_samplepointers,a1
  197. QC_sploop:moveq #0,d0
  198.     move.b (a0),d0
  199.     add.w d0,d0
  200.     add.w d0,d0
  201.     move.l a0,(a1,d0.w)
  202.     add.l d1,30(a0)
  203.     move.l 30(a0),a2
  204.     clr.w (a2)
  205.     lea 34(a0),a0
  206.     dbf d7,QC_sploop
  207.  
  208.     lea QC_patternpointers,a1    ;Get the patternadresses
  209.     moveq #0,d7
  210.     addq #1,a0
  211.     move.b (a0)+,d7
  212.     subq #1,d7
  213. QC_pploop:moveq #0,d0
  214.     move.b (a0),d0
  215.     add.w d0,d0
  216.     add.w d0,d0
  217.     move.l a0,(a1,d0.w)
  218.     add.l d1,22(a0)
  219.     lea 26(a0),a0
  220.     dbf d7,QC_pploop
  221.  
  222.     clr.w QC_nrofpos
  223.     move.b (a0)+,QC_nrofpos+1    
  224.     move.l a0,QC_posstart
  225.  
  226.     move.l #1776200,QC_ciaspeed
  227.  
  228.     moveq #0,d0
  229.     rts
  230. QC_initerr:moveq #-1,d0
  231.     rts
  232.  
  233. QC_init:move.l QC_posstart(pc),a0
  234.     lea QC_patternpointers,a1
  235.     moveq #0,d0
  236.     move.b (a0),d0
  237.     add.w d0,d0
  238.     add.w d0,d0
  239.     move.l (a1,d0.w),a1
  240.     move.l 22(a1),QC_currpattpointer    
  241.     move.b 1(a1),QC_breakrow+1
  242.     move.w #6,QC_speed
  243.     move.w QC_speed(pc),QC_speedcount
  244.     clr.b QC_newposflag
  245.     clr.w QC_rowcount
  246.     clr.w QC_pos
  247.     or.b #1,QC_event
  248.     move.w #1,t_length+QC_chan1
  249.     move.w #1,t_length+QC_chan2
  250.     move.w #1,t_length+QC_chan3
  251.     move.w #1,t_length+QC_chan4
  252.     move.w #1,t_replen+QC_chan1
  253.     move.w #1,t_replen+QC_chan2
  254.     move.w #1,t_replen+QC_chan3
  255.     move.w #1,t_replen+QC_chan4
  256.  
  257.     st QC_introrow            ;You must reset this every time 
  258.                     ;you restart the module
  259.  
  260.     move.l a0,-(sp)
  261.     move.l delibase(pc),a0            ; added by Delirium
  262.     move.l QC_ciaspeed,d0
  263.     divu #125,d0
  264.     move.w d0,dtg_Timer(a0)
  265.     move.l (sp)+,a0
  266.  
  267. QC_end:    move.w #$f,$dff096
  268.     clr.w $dff0a8
  269.     clr.w $dff0b8
  270.     clr.w $dff0c8
  271.     clr.w $dff0d8
  272.     rts        
  273.  
  274. **********************************************
  275. ;;******** Replayrutinen + interrupt *********
  276. **********************************************
  277.  
  278. QC_music:                        ;Ny (hela replayen)
  279.     addq #1,QC_speedcount
  280.     move.w QC_speed,d0
  281.     cmp.w QC_speedcount,d0
  282.     bgt QC_nonew
  283.     tst.b QC_pattwait
  284.     beq QC_getnotes
  285.     subq.b #1,QC_pattwait
  286.     clr.w QC_speedcount
  287.  
  288. QC_nonew:
  289.     lea QC_samplepointers,a4
  290.     lea QC_periods(pc),a3
  291.     lea QC_chan1(pc),a6
  292.     lea $dff0a0,a5
  293.     bsr QC_chkplayfx
  294.     lea QC_chan2-QC_chan1(a6),a6
  295.     lea $10(a5),a5
  296.     bsr QC_chkplayfx
  297.     lea QC_chan2-QC_chan1(a6),a6
  298.     lea $10(a5),a5
  299.     bsr QC_chkplayfx
  300.     lea QC_chan2-QC_chan1(a6),a6
  301.     lea $10(a5),a5
  302.     bsr QC_chkplayfx
  303.  
  304.     tst.w QC_dmacon
  305.     beq QC_mend
  306.     move.w QC_dmacon(pc),$dff096
  307.     move.l a0,-(sp)
  308.     move.l delibase(pc),a0            ; added by Delirium
  309.     move.l dtg_WaitAudioDMA(a0),a0
  310.     jsr (a0)
  311.     move.l (sp)+,a0
  312.     or.w #$8000,QC_dmacon
  313.     move.w QC_dmacon(pc),$dff096
  314.     move.l a0,-(sp)
  315.     move.l delibase(pc),a0            ; added by Delirium
  316.     move.l dtg_WaitAudioDMA(a0),a0
  317.     jsr (a0)
  318.     move.l (sp)+,a0
  319.     clr.w QC_dmacon
  320.     lea QC_chan1+t_repeat(pc),a0
  321.     lea $dff000,a5
  322.     move.l (a0),d0
  323.     cmp.l #$c00000,d0
  324.     blt .ok1
  325.     sub.l #$b80000,d0
  326. .ok1:    move.l d0,$a0(a5)
  327.     move.w 4(a0),$a4(a5)
  328.     move.l QC_chan2-QC_chan1(a0),d0
  329.     cmp.l #$c00000,d0
  330.     blt .ok2
  331.     sub.l #$b80000,d0
  332. .ok2:    move.l d0,$b0(a5)
  333.     move.w 4+QC_chan2-QC_chan1(a0),$b4(a5)
  334.     move.l QC_chan3-QC_chan1(a0),d0
  335.     cmp.l #$c00000,d0
  336.     blt .ok3
  337.     sub.l #$b80000,d0
  338. .ok3:    move.l d0,$c0(a5)
  339.     move.w 4+QC_chan3-QC_chan1(a0),$c4(a5)
  340.     move.l QC_chan4-QC_chan1(a0),d0
  341.     cmp.l #$c00000,d0
  342.     blt .ok4
  343.     sub.l #$b80000,d0
  344. .ok4:    move.l d0,$d0(a5)
  345.     move.w 4+QC_chan4-QC_chan1(a0),$d4(a5)
  346.     rts
  347.  
  348.  
  349. QC_chkplayfx:
  350.     lea QC_playfx(pc),a2
  351.     move.b t_cmd(a6),d0
  352.     and.w #$f,d0
  353.     add.w d0,d0
  354.     add.w d0,d0
  355.     move.l (a2,d0.w),a0
  356.     jmp (a0)
  357.  
  358. QC_getnotes:
  359.     tst.b QC_introrow
  360.     bne QC_ok
  361.     tst.b QC_event
  362.     beq QC_tstnewpos
  363.     btst #0,QC_event
  364.     beq QC_tstnewpos
  365.     and.b #$fe,QC_event
  366. QC_settempo:
  367.     move.l QC_ciaspeed,d0
  368.     divu QC_tempo,d0
  369. QC_ciab:move.l a0,-(sp)
  370.     move.l delibase(pc),a0            ; added by Delirium
  371.     move.w d0,dtg_Timer(a0)
  372.     move.l dtg_SetTimer(a0),a0
  373.     jsr (a0)
  374.     move.l (sp)+,a0
  375. QC_tstnewpos:
  376.     tst.b QC_newposflag
  377.     beq QC_tstend
  378.     clr.b QC_newposflag
  379.     move.w QC_newposnr,QC_pos            ;Ny
  380.     bra QC_newpos
  381. QC_tstend:tst.b QC_jumpbreakflag
  382.     beq QC_tstend2
  383.     clr.b QC_jumpbreakflag
  384.     move.w QC_looprow(pc),d0
  385.     cmp.w QC_breakrow(pc),d0
  386.     bgt QC_ok
  387.     move.w d0,QC_rowcount
  388.     bra QC_ok
  389. QC_tstend2:
  390.     addq.w #1,QC_rowcount
  391.     move.w QC_rowcount(pc),d0
  392.     cmp.w QC_breakrow(pc),d0
  393.     ble QC_ok
  394.     tst.b QC_playpatt
  395.     bne QC_nonewpatt
  396.     addq.w #1,QC_pos
  397. QC_newpos:
  398.     move.w QC_pos(pc),d0
  399.     cmp.w QC_nrofpos(pc),d0
  400.     blt QC_getpos
  401.     clr.w QC_pos
  402.     move.l a0,-(sp)
  403.     move.l delibase(pc),a0            ; added by Delirium
  404.     move.l dtg_SongEnd(a0),a0
  405.     jsr (a0)
  406.     move.l (sp)+,a0
  407.     moveq #0,d0
  408. QC_getpos:
  409.     move.w d0,-(sp)
  410.     move.w QC_pos,d0
  411.     move.w (sp)+,d0
  412.     move.l QC_posstart,a0
  413.     move.b (a0,d0.w),d0
  414.     move.w d0,QC_currpatt
  415.     add.w d0,d0
  416.     add.w d0,d0
  417.     lea QC_patternpointers,a0
  418.     move.l (a0,d0.w),a0
  419.     move.l 22(a0),QC_currpattpointer
  420.     move.b 1(a0),QC_breakrow+1
  421.     move.w QC_newrow(pc),QC_rowcount
  422.     clr.w QC_newrow
  423.     move.w QC_breakrow,d0
  424.     cmp.w QC_rowcount,d0
  425.     bge QC_ok
  426.     move.w d0,QC_rowcount
  427.     bra QC_ok
  428. QC_nonewpatt:
  429.     clr.w QC_rowcount
  430. QC_ok:    sf QC_introrow
  431.     clr.w QC_speedcount
  432.     move.l QC_currpattpointer(pc),a0
  433.     move.w QC_rowcount(pc),d0
  434.     asl.w #4,d0
  435.     add.w d0,a0
  436.     lea QC_samplepointers,a4
  437.     lea QC_periods(pc),a3
  438.  
  439.     lea $dff0a0,a5
  440.     lea QC_chan1(pc),a6
  441.     bsr QC_playnote
  442.     lea $10(a5),a5
  443.     lea QC_chan2-QC_chan1(a6),a6
  444.     bsr QC_playnote
  445.     lea $10(a5),a5
  446.     lea QC_chan2-QC_chan1(a6),a6
  447.     bsr QC_playnote
  448.     lea $10(a5),a5
  449.     lea QC_chan2-QC_chan1(a6),a6
  450.     bsr QC_playnote
  451.     tst.w QC_dmacon
  452.     beq QC_update
  453.  
  454.     move.w QC_dmacon(pc),$dff096
  455.     move.l a0,-(sp)
  456.     move.l delibase(pc),a0            ; added by Delirium
  457.     move.l dtg_WaitAudioDMA(a0),a0
  458.     jsr (a0)
  459.     move.l (sp)+,a0
  460.     or.w #$8000,QC_dmacon
  461.     move.w QC_dmacon(pc),$dff096
  462.     move.l a0,-(sp)
  463.     move.l delibase(pc),a0            ; added by Delirium
  464.     move.l dtg_WaitAudioDMA(a0),a0
  465.     jsr (a0)
  466.     move.l (sp)+,a0
  467.     clr.w QC_dmacon
  468.     lea QC_chan1+t_repeat(pc),a0
  469.     lea $dff000,a5
  470.     move.l (a0),d0
  471.     cmp.l #$c00000,d0
  472.     blt .ok1
  473.     sub.l #$b80000,d0
  474. .ok1:    move.l d0,$a0(a5)
  475.     move.w 4(a0),$a4(a5)
  476.     move.l QC_chan2-QC_chan1(a0),d0
  477.     cmp.l #$c00000,d0
  478.     blt .ok2
  479.     sub.l #$b80000,d0
  480. .ok2:    move.l d0,$b0(a5)
  481.     move.w 4+QC_chan2-QC_chan1(a0),$b4(a5)
  482.     move.l QC_chan3-QC_chan1(a0),d0
  483.     cmp.l #$c00000,d0
  484.     blt .ok3
  485.     sub.l #$b80000,d0
  486. .ok3:    move.l d0,$c0(a5)
  487.     move.w 4+QC_chan3-QC_chan1(a0),$c4(a5)
  488.     move.l QC_chan4-QC_chan1(a0),d0
  489.     cmp.l #$c00000,d0
  490.     blt .ok4
  491.     sub.l #$b80000,d0
  492. .ok4:    move.l d0,$d0(a5)
  493.     move.w 4+QC_chan4-QC_chan1(a0),$d4(a5)
  494. QC_update:
  495. QC_mend:rts
  496.  
  497. QC_playnote:move.l (a0)+,(a6)
  498.     moveq #0,d0
  499.     move.b (a6),d0
  500.     beq QC_isnote
  501.     add.w d0,d0
  502.     add.w d0,d0
  503.     move.l (a4,d0.w),a1
  504.     move.b 1(a1),t_volume+1(a6)
  505.     move.w 2(a1),t_length(a6)
  506.     move.b 25(a1),d0
  507.     and.w #$f,d0
  508.     add.w d0,d0
  509.     add.w d0,d0
  510.     move.l (a3,d0.w),t_finetune(a6)
  511.     move.l 30(a1),d1
  512.     move.l d1,t_start(a6)
  513.     move.l d1,t_realstart(a6)
  514.     clr.w 8(a5)
  515.     tst.b t_enable(a6)
  516.     beq .novol
  517.     move.w t_volume(a6),d0
  518.     mulu t_mainvol(a6),d0
  519.     lsr.w #6,d0
  520.     move.w d0,t_realvol(a6)
  521.     move.w d0,8(a5)
  522. .novol:    btst #0,24(a1)
  523.     beq .noloop
  524.     moveq #0,d0
  525.     move.w 26(a1),d0
  526.     move.w d0,t_rep(a6)
  527.     add.l d0,d1
  528.     add.l d0,d1
  529.     move.l d1,t_repeat(a6)
  530.     moveq #0,d0
  531.     move.w 26(a1),d0
  532.     moveq #0,d1
  533.     move.w 28(a1),d1
  534.     add.l d0,d1
  535.     move.w d1,t_length(a6)
  536.     move.w 28(a1),t_replen(a6)
  537.     bra QC_isnote
  538. .noloop    move.l #QC_quiet,t_repeat(a6)
  539.     clr.w t_rep(a6)
  540.     move.w #$1,t_replen(a6)
  541. QC_isnote:
  542.     tst.b t_notenr(a6)
  543.     blt QC_chkfirstfx
  544.     move.b t_notenr(a6),t_notenr2+1(a6)            ;Ny (flyttad)
  545.     move.w t_cmd(a6),d0
  546.     and.w #$ff0,d0
  547.     cmp.w #$e50,d0
  548.     beq QC_setfinetunefirst
  549.     and.w #$f00,d0
  550.     cmp.w #$300,d0
  551.     beq QC_settoneport
  552.     cmp.w #$500,d0
  553.     beq QC_settoneport
  554. QC_getper:move.w t_notenr2(a6),d0
  555.     add.w d0,d0
  556.     move.l t_finetune(a6),a2
  557.     move.w (a2,d0.w),t_period(a6)
  558.     move.w t_cmd(a6),d0
  559.     and.w #$ff0,d0
  560.     cmp.w #$ed0,d0
  561.     beq QC_notedelay
  562.     move.w t_dmabit(a6),d0
  563.     or.w d0,QC_dmacon
  564.     move.l t_start(a6),d0
  565.     cmp.l #$c00000,d0
  566.     blt .ok
  567.     sub.l #$b80000,d0
  568. .ok:    move.l d0,(a5)
  569.     clr.l t_adrcount(a6)
  570.     move.b (a6),t_samplenr(a6)
  571.     move.w t_length(a6),t_reallength(a6)
  572.     sf t_looping(a6)
  573.     st t_going(a6)
  574.     move.w t_length(a6),4(a5)
  575.     move.w t_period(a6),6(a5)
  576. QC_chkfirstfx:
  577.     lea QC_fxaftersetperiod(pc),a2
  578.     moveq #0,d0
  579.     move.b t_cmd(a6),d0
  580.     add.w d0,d0
  581.     add.w d0,d0
  582.     move.l (a2,d0.w),a2
  583.     jmp (a2)
  584.  
  585.  
  586. QC_setfinetunefirst:
  587.     move.b t_cmdarg(a6),d0
  588.     add.w d0,d0
  589.     add.w d0,d0
  590.     move.l (a3,d0.w),t_finetune(a6)
  591.     bra QC_getper
  592.  
  593. QC_ecommands:
  594.     lea QC_efx(pc),a2
  595.     move.b t_cmdarg(a6),d0
  596.     and.w #$f0,d0
  597.     lsr.w #2,d0
  598.     move.l (a2,d0.w),a2
  599.     jmp (a2)
  600.  
  601. QC_playecommands:
  602.     lea QC_playefx(pc),a2
  603.     move.b t_cmdarg(a6),d0
  604.     and.w #$f0,d0
  605.     lsr.w #2,d0
  606.     move.l (a2,d0.w),a2
  607.     jmp (a2)
  608.  
  609. ********** Effect commands **********
  610.  
  611. QC_arpeggio:                    ;Ny
  612.     tst.b t_cmdarg(a6)
  613.     beq QC_mend
  614.     lea QC_arptbl,a2
  615.     move.w QC_speedcount,d0
  616.     tst.b (a2,d0.w)
  617.     beq QC_arp2
  618.     blt QC_arp1
  619.     move.b t_cmdarg(a6),d0
  620.     and.w #$f,d0
  621.     add.w t_notenr2(a6),d0
  622.     add.w d0,d0
  623.     move.l t_finetune(a6),a2
  624.     move.w (a2,d0.w),6(a5)
  625.     rts
  626. QC_arp1:move.w t_period(a6),6(a5)
  627.     rts
  628. QC_arp2:moveq #0,d0
  629.     move.b t_cmdarg(a6),d0
  630.     lsr.w #4,d0
  631.     add.w t_notenr2(a6),d0
  632.     add.w d0,d0
  633.     move.l t_finetune(a6),a2
  634.     move.w (a2,d0.w),6(a5)
  635.     rts
  636.  
  637. QC_slideup:
  638.     moveq #0,d0
  639.     move.b t_cmdarg(a6),d0
  640.     sub.w d0,t_period(a6)
  641.     cmp.w #113,t_period(a6)
  642.     bgt QC_sunotlow
  643.     move.w #113,t_period(a6)
  644. QC_sunotlow:
  645.     move.w t_period(a6),6(a5)
  646.     rts
  647.  
  648. QC_slidedown:
  649.     moveq #0,d0
  650.     move.b t_cmdarg(a6),d0
  651.     add.w d0,t_period(a6)
  652.     cmp.w #856,t_period(a6)
  653.     blt QC_sdnothigh
  654.     move.w #856,t_period(a6)
  655. QC_sdnothigh:
  656.     move.w t_period(a6),6(a5)
  657.     rts
  658.  
  659. QC_settoneport:
  660.     move.w t_notenr2(a6),d0
  661.     add.w d0,d0
  662.     move.l t_finetune(a6),a2
  663.     move.w (a2,d0.w),d0
  664.     move.w d0,t_wantedperiod(a6)
  665.     cmp.w t_period(a6),d0
  666.     bgt QC_setportdown
  667.     clr.b t_portdir(a6)
  668.     rts
  669. QC_setportdown:
  670.     move.b #1,t_portdir(a6)
  671.     rts
  672.  
  673. QC_toneport:
  674.     tst.w t_wantedperiod(a6)
  675.     beq QC_mend
  676.     moveq #0,d0
  677.     move.b t_cmdarg(a6),d0
  678.     beq QC_tpold
  679.     move.b d0,t_portspeed(a6)
  680.     tst.b t_portdir(a6)            
  681.     bne QC_portdown                
  682.     sub.w d0,t_period(a6)            
  683.     move.w t_wantedperiod(a6),d0        
  684.     cmp.w t_period(a6),d0
  685.     blt QC_notyetwanted
  686.     move.w d0,6(a5)
  687.     move.w d0,t_period(a6)    
  688.     clr.w t_wantedperiod(a6)
  689.     rts
  690. QC_tpold:move.b t_portspeed(a6),d0
  691.     tst.b t_portdir(a6)
  692.     bne QC_portdown
  693.     sub.w d0,t_period(a6)
  694.     move.w t_wantedperiod(a6),d0
  695.     cmp.w t_period(a6),d0
  696.     blt QC_notyetwanted
  697.     move.w d0,6(a5)
  698.     move.w d0,t_period(a6)
  699.     clr.w t_wantedperiod(a6)
  700.     rts
  701. QC_portdown:
  702.     add.w d0,t_period(a6)
  703.     move.w t_wantedperiod(a6),d0
  704.     cmp.w t_period(a6),d0
  705.     bgt QC_notyetwanted
  706.     move.w d0,6(a5)
  707.     move.w d0,t_period(a6)
  708.     clr.w t_wantedperiod(a6)
  709.     rts
  710. QC_notyetwanted:
  711.     tst.b t_glisscont(a6)
  712.     beq QC_nogliss
  713.     move.l t_finetune(a6),a2
  714.     move.w t_period(a6),d0
  715. QC_glissloop:
  716.     cmp.w (a2)+,d0
  717.     blt QC_glissloop
  718.     move.w -2(a2),6(a5)
  719.     rts
  720. QC_nogliss:
  721.     move.w t_period(a6),6(a5)
  722.     rts
  723.  
  724. QC_vibrato:
  725.     moveq #0,d0
  726.     move.b t_vibwave(a6),d0
  727.     asl.w #7,d0
  728.     lea QC_vibtables(pc),a2
  729.     add.w d0,a2
  730.     moveq #0,d0
  731.     move.b t_cmdarg(a6),d0
  732.     beq QC_vib
  733.     move.w d0,d1
  734.     and.b #$f,d0
  735.     beq QC_vibusespeed
  736.     and.b #$f0,t_vibcmd(a6)
  737.     or.b d0,t_vibcmd(a6)
  738. QC_vibusespeed:
  739.     and.b #$f0,d1
  740.     beq QC_vib
  741.     and.b #$f,t_vibcmd(a6)
  742.     or.b d1,t_vibcmd(a6)
  743. QC_vib:    move.b t_vibcmd(a6),d0
  744.     lsr.w #3,d0
  745.     add.w d0,t_vibpos(a6)
  746.     and.w #$7e,t_vibpos(a6)
  747.     move.w t_vibpos(a6),d0
  748.     move.w t_period(a6),d1
  749.     move.w (a2,d0.w),d0
  750.     move.b t_vibcmd(a6),d2
  751.     and.w #$f,d2
  752.     muls d2,d0
  753.     add.l d0,d0
  754.     add.l d0,d0
  755.     swap d0
  756.     add.w d0,d1
  757.     cmp.w #856,d1
  758.     blt QC_vibnothigh
  759.     move.w #856,6(a5)
  760.     rts
  761. QC_vibnothigh:
  762.     cmp.w #113,d1
  763.     bgt QC_vibnotlow
  764.     move.w #113,6(a5)
  765.     rts
  766. QC_vibnotlow:
  767.     move.w d1,6(a5)
  768.     rts
  769.  
  770. QC_toneportandvolslide:
  771.     tst.w t_wantedperiod(a6)
  772.     beq QC_volslide
  773.     bsr QC_tpold
  774.     bra QC_volslide
  775.  
  776. QC_vibratoandvolslide:
  777.     bsr QC_vib
  778.     bra QC_volslide
  779.  
  780. QC_tremolo:
  781.     moveq #0,d0
  782.     move.b t_tremwave(a6),d0
  783.     asl.w #7,d0
  784.     lea QC_vibtables(pc),a2
  785.     add.w d0,a2
  786.     moveq #0,d0
  787.     move.b t_cmdarg(a6),d0
  788.     beq QC_trem
  789.     move.w d0,d1
  790.     and.b #$f,d0
  791.     beq QC_tremusespeed
  792.     and.b #$f0,t_tremcmd(a6)
  793.     or.b d0,t_tremcmd(a6)
  794. QC_tremusespeed:
  795.     and.b #$f0,d1
  796.     beq QC_trem
  797.     and.b #$f,t_tremcmd(a6)
  798.     or.b d1,t_tremcmd(a6)
  799. QC_trem:move.b t_tremcmd(a6),d0
  800.     lsr.w #3,d0
  801.     add.w d0,t_trempos(a6)
  802.     and.w #$7e,t_trempos(a6)
  803.     move.w t_trempos(a6),d0
  804.     move.w t_volume(a6),d1
  805.     move.w (a2,d0.w),d0
  806.     move.b t_tremcmd(a6),d2
  807.     and.w #$f,d2
  808.     muls d2,d0
  809.     asl.l #3,d0
  810.     swap d0
  811.     add.w d0,d1
  812.     cmp.w #$40,d1
  813.     blt QC_tremnothigh
  814.     tst.b t_enable(a6)
  815.     beq QC_mend
  816.     move.w t_mainvol(a6),t_realvol(a6)
  817.     move.w t_mainvol(a6),8(a5)
  818.     rts
  819. QC_tremnothigh:
  820.     tst.w d1
  821.     bgt QC_tremnotlow
  822.     tst.b t_enable(a6)
  823.     beq QC_mend
  824.     clr.w 8(a5)
  825.     rts
  826. QC_tremnotlow:
  827.     tst.b t_enable(a6)
  828.     beq QC_mend
  829.     mulu t_mainvol(a6),d1
  830.     lsr.w #6,d1
  831.     move.w d1,t_realvol(a6)
  832.     move.w d1,8(a5)
  833.     rts
  834.  
  835. QC_sampleoffset:
  836.     moveq #0,d0
  837.     move.b t_cmdarg(a6),d0
  838.     beq QC_sook
  839.     move.b d0,t_sampleoffset(a6)
  840. QC_sook:move.b t_sampleoffset(a6),d0
  841.     asl.w #8,d0
  842.     moveq #0,d1
  843.     move.w t_length(a6),d1
  844.     move.w d1,t_reallength(a6)
  845.     move.l d0,t_adrcount(a6)
  846.     sub.l d0,d1
  847.     ble QC_sotoolong
  848.     move.w d1,t_length(a6)
  849.     add.l d0,d0
  850.     add.l d0,t_start(a6)
  851.     move.l t_start(a6),d0
  852.     cmp.l #$c00000,d0
  853.     blt .ok
  854.     sub.l #$b80000,d0
  855. .ok:    move.l d0,(a5)
  856.     move.b (a6),t_samplenr(a6)
  857.     sf t_looping(a6)
  858.     st t_going(a6)
  859.     move.w t_length(a6),4(a5)
  860.     rts
  861. QC_sotoolong:
  862.     move.w #1,t_length(a6)
  863.     move.w t_length(a6),4(a5)
  864.     rts
  865.  
  866. QC_volslide:
  867.     moveq #0,d0
  868.     move.b t_cmdarg(a6),d0
  869.     lsr.w #4,d0
  870.     beq QC_volslidedown
  871.     add.w d0,t_volume(a6)
  872.     cmp.w #$40,t_volume(a6)
  873.     blt QC_setvol
  874.     move.w #$40,t_volume(a6)
  875. QC_setvol:
  876.     tst.b t_enable(a6)
  877.     beq QC_mend
  878.     move.w t_volume(a6),d0
  879.     mulu t_mainvol(a6),d0
  880.     lsr.w #6,d0
  881.     move.w d0,t_realvol(a6)
  882.     move.w d0,8(a5)
  883.     rts
  884. QC_volslidedown:
  885.     move.b t_cmdarg(a6),d0
  886.     sub.w d0,t_volume(a6)
  887.     tst.w t_volume(a6)
  888.     bgt QC_setvol
  889.     clr.w t_volume(a6)
  890.     tst.b t_enable(a6)
  891.     beq QC_mend
  892.     clr.w 8(a5)
  893.     rts
  894.  
  895. QC_posjump:                ;Ny
  896.     move.b t_cmdarg(a6),d0
  897.     move.b d0,QC_newposnr+1
  898.     move.b #1,QC_newposflag
  899.     clr.w QC_newrow
  900.     rts
  901.  
  902. QC_volumechange:
  903.     move.b t_cmdarg(a6),d0
  904.     cmp.b #$40,d0
  905.     blo QC_volchhigh
  906.     move.w #$40,t_volume(a6)
  907.     tst.b t_enable(a6)
  908.     beq QC_mend
  909.     move.w t_mainvol(a6),t_realvol(a6)
  910.     move.w t_mainvol(a6),8(a5)
  911.     rts
  912. QC_volchhigh:
  913.     move.b d0,t_volume+1(a6)
  914.     tst.b t_enable(a6)
  915.     beq QC_mend
  916.     move.w t_volume(a6),d0
  917.     mulu t_mainvol(a6),d0
  918.     lsr.w #6,d0
  919.     move.w d0,t_realvol(a6)
  920.     move.w d0,8(a5)
  921.     rts
  922.  
  923. QC_patternbreak:            ;Ny
  924.     move.w QC_pos,d0
  925.     addq.w #1,d0
  926.     move.w d0,QC_newposnr
  927.     move.b t_cmdarg(a6),QC_newrow+1
  928.     move.b #1,QC_newposflag
  929.     rts
  930.  
  931. QC_setspeed:
  932.     move.b t_cmdarg(a6),d0
  933.     beq QC_setspeed1
  934.     cmp.b #$1f,d0
  935.     bhi QC_temposet
  936.     move.b d0,QC_speed+1
  937.     clr.w QC_speedcount
  938.     rts
  939. QC_setspeed1:
  940.     move.w #1,QC_speed
  941.     clr.w QC_speedcount
  942.     rts
  943. QC_temposet:
  944.     move.b d0,QC_tempo+1
  945.     or.b #$1,QC_event
  946.     rts
  947.  
  948. QC_setfilter:
  949.     move.b t_cmdarg(a6),d0
  950.     and.b #1,d0
  951.     add.b d0,d0
  952.     and.b #$fd,$bfe001
  953.     or.b d0,$bfe001
  954.     rts
  955.  
  956. QC_fineslideup:
  957.     move.b t_cmdarg(a6),d0
  958.     and.w #$f,d0
  959.     sub.w d0,t_period(a6)
  960.     cmp.w #113,t_period(a6)
  961.     bgt QC_fsunotlow
  962.     move.w #113,t_period(a6)
  963. QC_fsunotlow:
  964.     move.w t_period(a6),6(a5)
  965.     rts
  966.  
  967. QC_fineslidedown:
  968.     move.b t_cmdarg(a6),d0
  969.     and.w #$f,d0
  970.     add.w d0,t_period(a6)
  971.     cmp.w #856,t_period(a6)
  972.     blt QC_fsdnothigh
  973.     move.w #856,t_period(a6)
  974. QC_fsdnothigh:
  975.     move.w t_period(a6),6(a5)
  976.     rts
  977.  
  978. QC_glisscontrol:
  979.     move.b t_cmdarg(a6),t_glisscont(a6)
  980.     and.b #$f,t_glisscont(a6)
  981.     rts
  982.  
  983. QC_vibratowave:
  984.     move.b t_cmdarg(a6),t_vibwave(a6)
  985.     and.b #$f,t_vibwave(a6)
  986.     rts
  987.  
  988. QC_finetune:
  989.     move.b t_cmdarg(a6),d0
  990.     and.w #$f,d0
  991.     add.w d0,d0
  992.     add.w d0,d0
  993.     move.l (a3,d0.w),t_finetune(a6)
  994.     rts
  995.  
  996. QC_jumploop:
  997.     move.b t_cmdarg(a6),d0
  998.     and.w #$f,d0
  999.     beq QC_saveloop
  1000.     tst.b QC_loopcount
  1001.     beq QC_newloop
  1002.     subq.b #1,QC_loopcount
  1003.     beq QC_mend
  1004.     move.b #1,QC_jumpbreakflag
  1005.     rts
  1006. QC_newloop:
  1007.     move.b d0,QC_loopcount
  1008.     move.b #1,QC_jumpbreakflag
  1009.     rts
  1010. QC_saveloop:
  1011.     move.w QC_rowcount(pc),QC_looprow
  1012.     rts
  1013.  
  1014. QC_tremolowave:
  1015.     move.b t_cmdarg(a6),t_tremwave(a6)
  1016.     and.b #$f,t_tremwave(a6)
  1017.     rts
  1018.  
  1019. QC_initretrig:
  1020.     clr.b t_retrig(a6)
  1021. QC_retrignote:
  1022.     addq.b #1,t_retrig(a6)
  1023.     move.b t_cmdarg(a6),d0
  1024.     and.b #$f,d0
  1025.     cmp.b t_retrig(a6),d0
  1026.     bgt QC_mend
  1027.     clr.b t_retrig(a6)
  1028.     move.w t_dmabit(a6),d0
  1029.     or.w d0,QC_dmacon
  1030.     move.l t_start(a6),d0
  1031.     cmp.l #$c00000,d0
  1032.     blt .ok
  1033.     sub.l #$b80000,d0
  1034. .ok:    move.l d0,(a5)
  1035.     clr.l t_adrcount(a6)
  1036.     move.b (a6),t_samplenr(a6)
  1037.     sf t_looping(a6)
  1038.     st t_going(a6)
  1039.     move.w t_length(a6),4(a5)
  1040.     move.w t_period(a6),6(a5)
  1041.     rts
  1042.  
  1043. QC_volumefineup:
  1044.     move.b t_cmdarg(a6),d0
  1045.     and.w #$f,d0
  1046.     add.w d0,t_volume(a6)
  1047.     cmp.w #$40,t_volume(a6)
  1048.     blt QC_vfuset
  1049.     move.w #$40,t_volume(a6)
  1050.     tst.b t_enable(a6)
  1051.     beq QC_mend
  1052.     move.w t_mainvol(a6),t_realvol(a6)
  1053.     move.w t_mainvol(a6),8(a5)
  1054.     rts
  1055. QC_vfuset:
  1056.     tst.b t_enable(a6)
  1057.     beq QC_mend
  1058.     move.w t_volume(a6),d0
  1059.     mulu t_mainvol(a6),d0
  1060.     lsr.w #6,d0
  1061.     move.w d0,t_realvol(a6)
  1062.     move.w d0,8(a5)
  1063.     rts
  1064.  
  1065. QC_volumefinedown:
  1066.     move.b t_cmdarg(a6),d0
  1067.     and.w #$f,d0
  1068.     sub.w d0,t_volume(a6)
  1069.     bge QC_vfdset
  1070.     clr.w t_volume(a6)
  1071.     tst.b t_enable(a6)
  1072.     beq QC_mend
  1073.     clr.w 8(a5)
  1074.     rts
  1075. QC_vfdset:
  1076.     tst.b t_enable(a6)
  1077.     beq QC_mend
  1078.     move.w t_volume(a6),d0
  1079.     mulu t_mainvol(a6),d0
  1080.     lsr.w #6,d0
  1081.     move.w d0,t_realvol(a6)
  1082.     move.w d0,8(a5)
  1083.     rts
  1084.  
  1085. QC_notecut:
  1086.     moveq #0,d1
  1087.     move.b t_cmdarg(a6),d1
  1088.     and.b #$f,d1
  1089.     cmp.w QC_speedcount(pc),d1
  1090.     bgt QC_mend
  1091.     clr.w t_volume(a6)
  1092.     tst.b t_enable(a6)
  1093.     beq QC_mend
  1094.     clr.w 8(a5)
  1095.     rts
  1096.  
  1097. QC_notedelay:
  1098.     moveq #0,d1
  1099.     tst.b t_notenr(a6)
  1100.     blt QC_mend
  1101.     move.b t_cmdarg(a6),d1
  1102.     and.b #$f,d1
  1103.     cmp.w QC_speedcount(pc),d1
  1104.     bne QC_mend
  1105.     move.w t_dmabit(a6),d0
  1106.     or.w d0,QC_dmacon
  1107.     move.l t_start(a6),d0
  1108.     cmp.l #$c00000,d0
  1109.     blt .ok
  1110.     sub.l #$b80000,d0
  1111. .ok:    move.l d0,(a5)
  1112.     clr.l t_adrcount(a6)
  1113.     move.b (a6),t_samplenr(a6)
  1114.     sf t_looping(a6)
  1115.     st t_going(a6)
  1116.     move.w t_length(a6),4(a5)
  1117.     move.w t_period(a6),6(a5)
  1118.     rts
  1119.  
  1120. QC_patterndelay:
  1121.     move.b t_cmdarg(a6),QC_pattwait
  1122.     and.b #$f,QC_pattwait
  1123.     rts
  1124.  
  1125. QC_arptbl:rept 86        ;if your assembler doensn't want to handle
  1126.     dc.b -1,0,1        ;the "rept" command, you'll have to write
  1127.     endr            ;a list incl. 256 numbers like this:
  1128.                 ;-1,0,1,-1,0,1,-1.. and so on.
  1129.  
  1130. QC_playfx:dc.l QC_arpeggio
  1131.     dc.l QC_slideup
  1132.     dc.l QC_slidedown
  1133.     dc.l QC_toneport
  1134.     dc.l QC_vibrato
  1135.     dc.l QC_toneportandvolslide
  1136.     dc.l QC_vibratoandvolslide
  1137.     dc.l QC_tremolo
  1138.     dc.l QC_mend
  1139.     dc.l QC_mend
  1140.     dc.l QC_volslide
  1141.     dc.l QC_mend
  1142.     dc.l QC_mend
  1143.     dc.l QC_mend
  1144.     dc.l QC_playecommands
  1145.     dc.l QC_mend
  1146.  
  1147. QC_playefx:dc.l QC_mend
  1148.     dc.l QC_mend
  1149.     dc.l QC_mend
  1150.     dc.l QC_mend
  1151.     dc.l QC_mend
  1152.     dc.l QC_mend
  1153.     dc.l QC_mend
  1154.     dc.l QC_mend
  1155.     dc.l QC_mend
  1156.     dc.l QC_retrignote
  1157.     dc.l QC_mend
  1158.     dc.l QC_mend
  1159.     dc.l QC_notecut
  1160.     dc.l QC_notedelay
  1161.     dc.l QC_mend
  1162.     dc.l QC_mend
  1163.  
  1164. QC_efx:    dc.l QC_setfilter
  1165.     dc.l QC_fineslideup
  1166.     dc.l QC_fineslidedown
  1167.     dc.l QC_glisscontrol
  1168.     dc.l QC_vibratowave
  1169.     dc.l QC_finetune
  1170.     dc.l QC_jumploop
  1171.     dc.l QC_tremolowave
  1172.     dc.l QC_mend
  1173.     dc.l QC_initretrig
  1174.     dc.l QC_volumefineup
  1175.     dc.l QC_volumefinedown
  1176.     dc.l QC_notecut
  1177.     dc.l QC_notedelay
  1178.     dc.l QC_patterndelay
  1179.     dc.l QC_mend
  1180.  
  1181.  
  1182. QC_fxaftersetperiod:
  1183.     dc.l QC_arpeggio
  1184.     dc.l QC_mend
  1185.     dc.l QC_mend
  1186.     dc.l QC_mend
  1187.     dc.l QC_mend
  1188.     dc.l QC_mend
  1189.     dc.l QC_mend
  1190.     dc.l QC_mend
  1191.     dc.l QC_mend
  1192.     dc.l QC_sampleoffset
  1193.     dc.l QC_mend
  1194.     dc.l QC_posjump
  1195.     dc.l QC_volumechange
  1196.     dc.l QC_patternbreak
  1197.     dc.l QC_ecommands
  1198.     dc.l QC_setspeed
  1199.  
  1200.  
  1201. QC_vibtables:
  1202.     dc.w 0,3211,6392,9511,12539,15446,18204,20787,23169,25329
  1203.     dc.w 27244,28897,30272,31356,32137,32609,32767,32609,32137
  1204.     dc.w 31356,30272,28897,27244,25329,23169,20787,18204,15446
  1205.     dc.w 12539,9511,6392,3211
  1206.     dc.w 0,-3211,-6392,-9511,-12539,-15446,-18204,-20787,-23169,-25329
  1207.     dc.w -27244,-28897,-30272,-31356,-32137,-32609,-32767,-32609,-32137
  1208.     dc.w -31356,-30272,-28897,-27244,-25329,-23169,-20787,-18204,-15446
  1209.     dc.w -12539,-9511,-6392,-3211
  1210.  
  1211.     dc.w 32767,31744,30720,29696,28672,27648,26624,25600,24576,23552
  1212.     dc.w 22528,21504,20480,19456,18432,17408,16384,15360,14336,13312
  1213.     dc.w 12288,11264,10240,9216,8192,7168,6144,5120,4096,3072,2048,1024
  1214.     dc.w 0,-1024,-2048,-3072,-4096,-5120,-6144,-8168,-8192,-9216,-10240
  1215.     dc.w -11264,-12288,-13312,-14336,-15360,-16384,-17408,-18432,-19456
  1216.     dc.w -20480,-21504,-22528,-23552,-24576,-25600,-26624,-27648,-28672
  1217.     dc.w -29696,-30720,-31744,-32768
  1218.  
  1219.     dc.w 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767
  1220.     dc.w 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767
  1221.     dc.w 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767
  1222.     dc.w 32767,32767
  1223.     dc.w -32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767
  1224.     dc.w -32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767
  1225.     dc.w -32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767
  1226.     dc.w -32767,-32767
  1227.  
  1228.  
  1229.  
  1230.  
  1231. QC_periods:dc.l QC_periodtable
  1232.     dc.l QC_periodtable+72
  1233.     dc.l QC_periodtable+144
  1234.     dc.l QC_periodtable+216
  1235.     dc.l QC_periodtable+288
  1236.     dc.l QC_periodtable+360
  1237.     dc.l QC_periodtable+432
  1238.     dc.l QC_periodtable+504
  1239.     dc.l QC_periodtable+576
  1240.     dc.l QC_periodtable+648
  1241.     dc.l QC_periodtable+720
  1242.     dc.l QC_periodtable+792
  1243.     dc.l QC_periodtable+864
  1244.     dc.l QC_periodtable+936
  1245.     dc.l QC_periodtable+1008
  1246.     dc.l QC_periodtable+1080
  1247.  
  1248.  
  1249. QC_periodtable:
  1250.     dc.w    856,808,762,720,678,640,604,570,538,508,480,453
  1251.     dc.w    428,404,381,360,339,320,302,285,269,254,240,226
  1252.     dc.w    214,202,190,180,170,160,151,143,135,127,120,113
  1253.  
  1254.     dc.w    850,802,757,715,674,637,601,567,535,505,477,450
  1255.     dc.w    425,401,379,357,337,318,300,284,268,253,239,225
  1256.     dc.w    213,201,189,179,169,159,150,142,134,126,119,113
  1257.  
  1258.     dc.w    844,796,752,709,670,632,597,563,532,502,474,447
  1259.     dc.w    422,398,376,355,335,316,298,282,266,251,237,224
  1260.     dc.w    211,199,188,177,167,158,149,141,133,125,118,112
  1261.  
  1262.     dc.w    838,791,746,704,665,628,592,559,528,498,470,444
  1263.     dc.w    419,395,373,352,332,314,296,280,264,249,235,222
  1264.     dc.w    209,198,187,176,166,157,148,140,132,125,118,111
  1265.  
  1266.     dc.w    832,785,741,699,660,623,588,555,524,495,467,441
  1267.     dc.w    416,392,370,350,330,312,294,278,262,247,233,220
  1268.     dc.w    208,196,185,175,165,156,147,139,131,124,117,110
  1269.  
  1270.     dc.w    826,779,736,694,655,619,584,551,520,491,463,437
  1271.     dc.w    413,390,368,347,328,309,292,276,260,245,232,219
  1272.     dc.w    206,195,184,174,164,155,146,138,130,123,116,109
  1273.  
  1274.     dc.w    820,774,730,689,651,614,580,547,516,487,460,434
  1275.     dc.w    410,387,365,345,325,307,290,274,258,244,230,217
  1276.     dc.w    205,193,183,172,163,154,145,137,129,122,115,109
  1277.  
  1278.     dc.w    814,768,725,684,646,610,575,543,513,484,457,431
  1279.     dc.w    407,384,363,342,323,305,288,272,256,242,228,216
  1280.     dc.w    204,192,181,171,161,152,144,136,128,121,114,108
  1281.  
  1282.     dc.w    907,856,808,762,720,678,640,604,570,538,508,480
  1283.     dc.w    453,428,404,381,360,339,320,302,285,269,254,240
  1284.     dc.w    226,214,202,190,180,170,160,151,143,135,127,120
  1285.  
  1286.     dc.w    900,850,802,757,715,675,636,601,567,535,505,477
  1287.     dc.w    450,425,401,379,357,337,318,300,284,268,253,238
  1288.     dc.w    225,212,200,189,179,169,159,150,142,134,126,119
  1289.  
  1290.     dc.w    894,844,796,752,709,670,632,597,563,532,502,474
  1291.     dc.w    447,422,398,376,355,335,316,298,282,266,251,237
  1292.     dc.w    223,211,199,188,177,167,158,149,141,133,125,118
  1293.  
  1294.     dc.w    887,838,791,746,704,665,628,592,559,528,498,470
  1295.     dc.w    444,419,395,373,352,332,314,296,280,264,249,235
  1296.     dc.w    222,209,198,187,176,166,157,148,140,132,125,118
  1297.  
  1298.     dc.w    881,832,785,741,699,660,623,588,555,524,494,467
  1299.     dc.w    441,416,392,370,350,330,312,294,278,262,247,233
  1300.     dc.w    220,208,196,185,175,165,156,147,139,131,123,117
  1301.  
  1302.     dc.w    875,826,779,736,694,655,619,584,551,520,491,463
  1303.     dc.w    437,413,390,368,347,328,309,292,276,260,245,232
  1304.     dc.w    219,206,195,184,174,164,155,146,138,130,123,116
  1305.  
  1306.     dc.w    868,820,774,730,689,651,614,580,547,516,487,460
  1307.     dc.w    434,410,387,365,345,325,307,290,274,258,244,230
  1308.     dc.w    217,205,193,183,172,163,154,145,137,129,122,115
  1309.  
  1310.     dc.w    862,814,768,725,684,646,610,575,543,513,484,457
  1311.     dc.w    431,407,384,363,342,323,305,288,272,256,242,228
  1312.     dc.w    216,203,192,181,171,161,152,144,136,128,121,114
  1313.  
  1314.  
  1315. QC_posstart:dc.l 0
  1316. QC_currpattpointer:dc.l 0
  1317. QC_currpatt:dc.w 0
  1318. QC_nrofpos:dc.w 0
  1319. QC_pos:    dc.w 0
  1320. QC_newposnr:dc.w 0
  1321. QC_speed:dc.w 6
  1322. QC_speedcount:dc.w 0
  1323. QC_breakrow:dc.w 0
  1324. QC_newrow:dc.w 0
  1325. QC_rowcount:dc.w 0
  1326. QC_arpcount:dc.w 0
  1327. QC_looprow:dc.w 0
  1328. QC_tempo:dc.w 125
  1329. QC_dmacon:dc.w 0
  1330. QC_newposflag:dc.b 0
  1331. QC_jumpbreakflag:dc.b 0
  1332. QC_loopcount:dc.b 0
  1333. QC_pattwait:dc.b 0
  1334. QC_introrow:dc.b 0,0
  1335. QC_ciaspeed:dc.l 0
  1336. QC_event:dc.b 0            ;bit 0 = check vblank
  1337. QC_playpatt:dc.b 0
  1338.  
  1339. QC_quietsamp:
  1340.     dc.w 0,1
  1341.     dcb.b 20,0
  1342.     dc.w 0
  1343.     dc.w 1
  1344.     dc.l QC_quiet
  1345.  
  1346. t_notenr = 1
  1347. t_cmd = 2
  1348. t_cmdarg = 3
  1349. t_repeat = 4
  1350. t_replen = 8
  1351. t_period = 10
  1352. t_volume = 12
  1353. t_length = 14
  1354. t_finetune = 42
  1355. t_start = 18
  1356. t_dmabit = 22
  1357. t_notenr2 = 24
  1358. t_wantedperiod = 26
  1359. t_portdir = 28
  1360. t_vibwave = 29
  1361. t_glisscont = 30
  1362. t_vibcmd = 31
  1363. t_vibpos = 32
  1364. t_tremwave = 34
  1365. t_tremcmd = 35
  1366. t_trempos = 36
  1367. t_sampleoffset = 38
  1368. t_retrig = 39
  1369. t_portspeed = 40
  1370. t_adrcount = 46
  1371. t_looping = 41
  1372. t_going = 50
  1373. t_rep = 52
  1374. t_samplenr =51
  1375. t_reallength = 54
  1376. t_realstart = 56
  1377. t_enable = 60
  1378. t_mainvol = 62
  1379. t_realvol = 64
  1380.  
  1381.     even
  1382. QC_chan1:dc.l 0            ;The note and command
  1383.     dc.l 0            ;Repeat
  1384.     dc.w 0            ;Replen
  1385.     dc.w 0            ;Period
  1386.     dc.w 0            ;Volume
  1387.     dc.w 0            ;Length
  1388.     dc.w 0            ;Unused
  1389.     dc.l 0            ;Start
  1390.     dc.w 1            ;DMAbit
  1391.     dc.w 0            ;NoteNr2
  1392.     dc.w 0            ;WantedPeriod
  1393.     dc.b 0            ;Portdir
  1394.     dc.b 0            ;VibWave
  1395.     dc.b 0            ;Glisscont
  1396.     dc.b 0            ;Vibcmd
  1397.     dc.w 0            ;VibPos
  1398.     dc.b 0            ;Tremwave
  1399.     dc.b 0            ;Tremcmd
  1400.     dc.w 0            ;Trempos
  1401.     dc.b 0            ;Sampleoffset
  1402.     dc.b 0            ;Retrig
  1403.     dc.b 0            ;Portspeed
  1404.     dc.b 0            ;Looping
  1405.     dc.l 0            ;Finetune
  1406.     dc.l 0            ;AdrCounter
  1407.     dc.b 0            ;Going
  1408.     dc.b 0            ;Samplenr
  1409.     dc.w 0            ;Repeat in words
  1410.     dc.w 0            ;Allways the length in words
  1411.     dc.l 0            ;Real startpos
  1412.     dc.b $ff        ;True = playable
  1413.     dc.b 0
  1414.     dc.w $40        ;Mainvol
  1415.     dc.w 0            ;Realvol
  1416.  
  1417.     even
  1418. QC_chan2:dc.l 0
  1419.     dc.l 0
  1420.     dc.w 0
  1421.     dc.w 0
  1422.     dc.w 0
  1423.     dc.w 0
  1424.     dc.w 0
  1425.     dc.l 0
  1426.     dc.w 2
  1427.     dc.w 0
  1428.     dc.w 0
  1429.     dc.b 0
  1430.     dc.b 0
  1431.     dc.b 0
  1432.     dc.b 0
  1433.     dc.w 0
  1434.     dc.b 0
  1435.     dc.b 0
  1436.     dc.w 0
  1437.     dc.b 0
  1438.     dc.b 0
  1439.     dc.b 0
  1440.     dc.b 0
  1441.     dc.l 0
  1442.     dc.l 0
  1443.     dc.b 0
  1444.     dc.b 0
  1445.     dc.w 0
  1446.     dc.w 0
  1447.     dc.l 0
  1448.     dc.b $ff
  1449.     dc.b 0
  1450.     dc.w $40        ;Mainvol
  1451.     dc.w 0
  1452.  
  1453.     even
  1454. QC_chan3:dc.l 0
  1455.     dc.l 0
  1456.     dc.w 0
  1457.     dc.w 0
  1458.     dc.w 0
  1459.     dc.w 0
  1460.     dc.w 0
  1461.     dc.l 0
  1462.     dc.w 4
  1463.     dc.w 0
  1464.     dc.w 0
  1465.     dc.b 0
  1466.     dc.b 0
  1467.     dc.b 0
  1468.     dc.b 0
  1469.     dc.w 0
  1470.     dc.b 0
  1471.     dc.b 0
  1472.     dc.w 0
  1473.     dc.b 0
  1474.     dc.b 0
  1475.     dc.b 0
  1476.     dc.b 0
  1477.     dc.l 0
  1478.     dc.l 0
  1479.     dc.b 0
  1480.     dc.b 0
  1481.     dc.w 0
  1482.     dc.w 0
  1483.     dc.l 0
  1484.     dc.b $ff
  1485.     dc.b 0
  1486.     dc.w $40        ;Mainvol
  1487.     dc.w 0
  1488.  
  1489.     even
  1490. QC_chan4:dc.l 0
  1491.     dc.l 0
  1492.     dc.w 0
  1493.     dc.w 0
  1494.     dc.w 0
  1495.     dc.w 0
  1496.     dc.w 0
  1497.     dc.l 0
  1498.     dc.w 8
  1499.     dc.w 0
  1500.     dc.w 0
  1501.     dc.b 0
  1502.     dc.b 0
  1503.     dc.b 0
  1504.     dc.b 0
  1505.     dc.w 0
  1506.     dc.b 0
  1507.     dc.b 0
  1508.     dc.w 0
  1509.     dc.b 0
  1510.     dc.b 0
  1511.     dc.b 0
  1512.     dc.b 0
  1513.     dc.l 0
  1514.     dc.l 0
  1515.     dc.b 0
  1516.     dc.b 0
  1517.     dc.w 0
  1518.     dc.w 0
  1519.     dc.l 0
  1520.     dc.b $ff
  1521.     dc.b 0
  1522.     dc.w $40        ;Mainvol
  1523.     dc.w 0
  1524.  
  1525.  
  1526.     SECTION Tables,BSS
  1527.  
  1528. QC_samplepointers:    ds.l 256
  1529. QC_patternpointers:    ds.l 256
  1530.  
  1531.  
  1532.     SECTION Sound,Data_C
  1533.  
  1534. QC_quiet:dc.l 0
  1535.  
  1536.